package com.xiaoshuidi.cloud.module.member.controller.admin.coupon.vo;

import com.xiaoshuidi.cloud.module.member.enums.coupon.CouponStatusEnum;
import com.xiaoshuidi.cloud.module.member.enums.coupon.CouponStatusOperateEnum;
import com.xiaoshuidi.cloud.module.member.enums.coupon.CouponTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;


/**
 * @description 优惠券表Vo实体
 * @author Alex
 * @date 2023-03-14 15:06:11
 * @version generator
 */
@Data
public class CouponVo{

	/**
	 * 主键id
	 */
	@Schema(description ="主键id")
	private Long id;
	/**
	 * 优惠券类型 1预定优惠|2老带新优惠|3新签约优惠|4 内部员工优惠|5其他优惠
	 */
	@Schema(description ="优惠券类型 1预定优惠|2老带新优惠|3新签约优惠|4 内部员工优惠|5其他优惠")
	private Integer couponType;

	/**
	 * 优惠券名称
	 */
	@Schema(description ="优惠券名称")
	private String couponName;
	/**
	 * 优惠金额 或者百分比
	 */
	@Schema(description ="优惠金额 或者百分比")
	private BigDecimal marginPreference;
	/**
	 * 优惠类型|0 立减|1 折扣
	 */
	@Schema(description ="优惠类型|0 立减|1 折扣")
	private Integer preferentialContentType;
	/**
	 * 老客 优惠金额 或者百分比
	 */
	@Schema(description ="老客 优惠金额 或者百分比")
	private BigDecimal marginPreferenceOld;
	/**
	 * 老客 优惠类型| 0 立减|1 折扣
	 */
	@Schema(description ="老客 优惠类型| 0 立减|1 折扣")
	private Integer preferentialContentTypeOld;
	/**
	 * 优惠券库存量 -1没有限制
	 */
	@Schema(description ="优惠券库存量 -1没有限制")
	private Long stock;
	/**
	 * 优惠券剩余量 -1没有限制
	 */
	@Schema(description ="优惠券剩余量 -1没有限制")
	private Long surplusStock;
	/**
	 * 优惠券使用量
	 */
	@Schema(description ="优惠券使用量")
	private Long couponUsage;
	/**
	 * 使用规则
	 */
	@Schema(description ="使用规则")
	private String useRules;
	/**
	 * 活动开始时间
	 */
	@Schema(description ="活动开始时间")
	private Date activityStartTime;
	/**
	 * 活动结束时间
	 */
	@Schema(description ="活动结束时间")
	private Date activityEndTime;
	/**
	 * 活动门店 -1不限制门店
	 */
	@Schema(description ="活动门店 -1不限制门店")
	private Long activityStore;
	/**
	 * 预定开始时间
	 */
	@Schema(description ="预定开始时间")
	private Date scheduledStartTime;
	/**
	 * 预定结束时间
	 */
	@Schema(description ="预定结束时间")
	private Date scheduledEndTime;
	/**
	 * 预定金额
	 */
	@Schema(description ="预定金额")
	private BigDecimal scheduledAmount;
	/**
	 * 最低租赁月份
	 */
	@Schema(description ="最低租赁月份")
	private Integer miniLeaseMonth;
	/**
	 * 最高租赁月份
	 */
	@Schema(description ="最高租赁月份")
	private Integer maxLeaseMonth;
	/**
	 * 签约开始日期
	 */
	@Schema(description ="签约开始日期")
	private Date signingStartTime;
	/**
	 * 签约结束时间
	 */
	@Schema(description ="签约结束时间")
	private Date signingEndTime;
	/**
	 * 使用类型 1合同期类有效 2 发券后多少天 3 固定日期
	 */
	private Integer couponUsageTimeType;
	/**
	 * 使用日期 -1 合同期内有效|大于0 发券后多少天有效
	 */
	@Schema(description ="使用日期 -1 合同期内有效|大于0 发券后多少天有效")
	private Integer couponUsageTime;
	/**
	 * 使用叠加 1与同一优惠可叠加使用|2 与其他活动可叠加使用
	 */
	@Schema(description ="使用叠加 1与同一优惠可叠加使用|2 与其他活动可叠加使用")
	private String couponUseOverlay;
	/**
	 * 凭证
	 */
	@Schema(description ="凭证")
	private String couponUrl;
	/**
	 * 创建时间
	 */
	@Schema(description ="创建时间")
	private Date createTime;
	/**
	 * 修改时间
	 */
	@Schema(description ="修改时间")
	private Date updateTime;
	/**
	 * 创建人
	 */
	@Schema(description ="创建人")
	private String creator;
	/**
	 * 修改人
	 */
	@Schema(description ="修改人")
	private Integer updater;
	/**
	 * 状态| 1【未提交】：操作有 查看、编辑、删除|2【审核中】：操作有 查看|3【审批驳回】：操作有 查看、编辑、删除|4【未开始】：操作有 查看、终止
	 * |5【进行中】：操作有 查看、数据、终止|6【已终止】手动终止后，不能继续发券，记录终止时间|7【已结束】：操作有 查看、数据
	 * */
	@Schema(description ="状态| 1【未提交】：操作有 查看、编辑、删除|2【审核中】：操作有 查看|3【审批驳回】：操作有 查看、编辑、删除|4【未开始】：操作有 查看、终止\n" +
		"|5【进行中】：操作有 查看、数据、终止|6【已终止】手动终止后，不能继续发券，记录终止时间|7【已结束】：操作有 查看、数据")
	private Integer couponStatus;
	/**
	 * 创建人名
	 */
	private String createdName;
	/**
	 * 是否删除 0-未删除 1-已删除
	 */
//	@Schema(description ="是否删除 0-未删除 1-已删除")
//	private Integer isDelete;


	@Schema(description ="优惠券类型 1预定优惠|2老带新优惠|3新签约优惠|4 内部员工优惠|5其他优惠")
	private String couponTypeName;
	/**
	 * 优惠券库存量 -1没有限制
	 */
	@Schema(description ="优惠券库存量 -1没有限制")
	private String stockName;
	/**
	 * 优惠券剩余量 -1没有限制
	 */
	private String surplusStockName;

	@Schema(description ="状态名")
	private String couponStatusName;

	@Schema(description ="操作")
	private Operate operate;

	@Data
	public class Operate{
		@Schema(description ="查看")
		private Boolean vie;
		@Schema(description ="编辑")
		private Boolean edi;
		@Schema(description ="删除")
		private Boolean del;
		@Schema(description ="编辑")
		private Boolean dat;
		@Schema(description ="终止")
		private Boolean ter;
		@Schema(description ="启动")
		private Boolean sta;

		public Operate(Boolean vie, Boolean edi, Boolean del, Boolean dat, Boolean ter, Boolean sta) {
			this.vie = vie;
			this.edi = edi;
			this.del = del;
			this.dat = dat;
			this.ter = ter;
			this.sta = sta;
		}
	}

	public String getCouponTypeName() {
		return CouponTypeEnum.getEnum(couponType).getDesc();
	}

	public String getStockName() {
		if(stock==-1){
			stockName="无限制";
		}else {
			stockName= String.valueOf(stock);
		}
		return stockName;
	}

	public String getSurplusStockName() {
		if(surplusStock==-1){
			surplusStockName="无限制";
		}else {
			surplusStockName= String.valueOf(surplusStock);
		}
		return surplusStockName;
	}

	public String getCouponStatusName() {
		String desc = CouponStatusEnum.getEnum(couponStatus).getDesc();
		return desc;
	}

	public Operate getOperate() {
		CouponStatusOperateEnum couponStatusOperateEnum = CouponStatusOperateEnum.getEnum(couponStatus);
		Operate operate1 = new Operate(couponStatusOperateEnum.getVie(), couponStatusOperateEnum.getEdi(),
			couponStatusOperateEnum.getDel(), couponStatusOperateEnum.getDat(),
			couponStatusOperateEnum.getTer(), couponStatusOperateEnum.getSta());
		return operate1;

	}
}
